package cl.jsoftlabs.gwt.soccer.client.ui.futbolclub;

import java.util.ArrayList;
import java.util.List;

import cl.jsoftlabs.gwt.soccer.client.bean.FutbolClubVO;
import cl.jsoftlabs.gwt.soccer.client.mvc.events.AppEvents;
import cl.jsoftlabs.gwt.soccer.client.services.FutbolClubService;
import cl.jsoftlabs.gwt.soccer.client.services.FutbolClubServiceAsync;

import com.extjs.gxt.ui.client.Style.SelectionMode;

import com.extjs.gxt.ui.client.data.BaseListLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ListLoader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.extjs.gxt.ui.client.widget.Status;

public class FutbolClubGrid extends LayoutContainer {
	public static final String ITEM_ID = "grid-futbol-club";
	public FutbolClubGrid() {
		status.setBox(true);
		status.setIconStyle("face-monkey");
		status.setText("Futbol Club Status");
		setItemId(ITEM_ID);
	}


	// gwt service
	final FutbolClubServiceAsync rpcService = FutbolClubService.Util.getInstance();

	FutbolClubVO futbolClubVO = new FutbolClubVO();
	
	private final ButtonBar buttonBar = new ButtonBar();
	private final Button btnNuevo = new Button("Nuevo");
	private final Button btnEliminar = new Button("Eliminar");
	private final Button btnModificar = new Button("Modificar");
	private final Button btnActualizar = new Button("Refrescar Listado");
	
	private final Status status = new Status();
	
	private Integer idFCSeleccionado = 0;
	
	private Grid<BeanModel> grid;

	@Override
	protected void onRender(Element parent, int index) {
		super.onRender(parent, index);
		setStyleAttribute("padding", "5px");
		
		ContentPanel cp = new ContentPanel();  
		  
	    cp.setHeading("Clubes");  
	    cp.setFrame(true);   

	    construirTablaConDatos();
    
	    cp.setLayout(new FitLayout());
	    
	    cp.add(grid);
	    //grid.setWidth("30px");
	    
	    cp.setCollapsible(true);
	    btnNuevo.setIconStyle("add");
	    btnNuevo.addSelectionListener(new SelectionListener<ButtonEvent>() {
			@Override
			public void componentSelected(ButtonEvent ce) {
				Dispatcher.forwardEvent(AppEvents.FutbolClubNuevo);
			}
		});
	    buttonBar.add(btnNuevo);
	    
	    btnModificar.addSelectionListener(new SelectionListener<ButtonEvent>() {
	    	public void componentSelected(ButtonEvent ce) {
	    		Dispatcher.forwardEvent(AppEvents.FutbolClubModificar, idFCSeleccionado);
	    	}
	    });
	    btnModificar.setIconStyle("edit");  
	    buttonBar.add(btnModificar);
	    
	    btnEliminar.setIconStyle("delete");
	    buttonBar.add(btnEliminar);
	    
	    btnActualizar.addSelectionListener(new SelectionListener<ButtonEvent>() {
			@Override
			public void componentSelected(ButtonEvent ce) {
				//loader.load();
				grid.getStore().getLoader().load();
			}
		});
	    btnActualizar.setIconStyle("refresh");
	    buttonBar.add(btnActualizar);
	    
	    cp.setTopComponent(buttonBar);
	    
	    cp.setBottomComponent(status);
 
	    add(cp); 
	    cp.setSize("600", "500");

	}
	
	// proxy and reader
	RpcProxy<List<FutbolClubVO>> proxy = new RpcProxy<List<FutbolClubVO>>() {
		@Override
		public void load(Object loadConfig,
				AsyncCallback<List<FutbolClubVO>> callback) {
			rpcService.obtenerClubes(callback);
			Info.display("Listado de Datos", "Lista Actualizada");
		}
	};
	BeanModelReader reader = new BeanModelReader();
	// loader and store
	ListLoader<ListLoadResult<ModelData>> loader = new BaseListLoader<ListLoadResult<ModelData>>(proxy, reader);
	ListStore<BeanModel> store = new ListStore<BeanModel>(loader);

	private void construirTablaConDatos() {		
		loader.load();
		// column model
		List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
		columns.add(new ColumnConfig("idFutbolClub", "ID", 30));
		columns.add(new ColumnConfig("nombrePais", "Pais", 60));
		columns.add(new ColumnConfig("nombreClub", "Nombre", 160));
		ColumnModel cm = new ColumnModel(columns);

		grid = new Grid<BeanModel>(store, cm);
		grid.setAutoExpandColumn("nombreClub");
		grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
		
		grid.getSelectionModel().addSelectionChangedListener(new SelectionChangedListener<BeanModel>() {
			@Override
			public void selectionChanged(SelectionChangedEvent<BeanModel> se) {
				status.setText((String) se.getSelection().get(0).get("nombreClub"));
				idFCSeleccionado = (Integer) se.getSelection().get(0).get("idFutbolClub");
			}
		});
	}

}
